package com.kaifamiao.methods;

public class Raccoon {

    public void traversal( int[] array ){
        if( array == null ) {
            System.out.println("参数不能为null");
            return;
        }
        if( array.length == 0 ) {
            System.out.println("数组不能是空的");
            return;
        }
        for( int i = 0 , last = array.length - 1; i < array.length ; i++ ){
            System.out.printf( i == last ? "%d\n" : "%d\t", array[i] );
        }
    }

    public int[] sort( int[] source ){
        if( source == null || source.length == 0 ) {
            // 抛出异常也会导致方法终结(从而从虚拟机栈中弹出当前方法对应的栈帧)
            throw new IllegalArgumentException("数组不能为空");
        }

        // 1、创建数组实例并为每个位置赋予默认值
        // 2、将堆内存中新创建的数组实例的首地址赋值给等号前的变量
        int[] target = new int[ source.length ];
        // 将 source 数组中 所有元素 拷贝到 target 数组中
        System.arraycopy( source, 0, target, 0, source.length );

        // 对 target 数组进行整体排序 (插入排序)
        for( int i = 1 ; i < target.length ; i++ ){
            for( int j = i ; j > 0 ; j-- ){
                if( target[j] < target[j-1] ) {
                    int temp = target[j];
                    target[j] = target[j-1];
                    target[j-1] = temp;
                }
            }
        }

        return target;
    }

    public static void main(String[] args) {
        Raccoon r = new Raccoon();

        int[] x = { 1, 100, -20, 99, 1000, 0, 30 };
        r.traversal( x ); // 1 , 100 , -20 , 99 , 1000 , 0 , 30

        int[] y = r.sort(x);
        r.traversal(y); // -20 , 0 , 1 , 30 , 99 , 100 , 1000

        r.traversal( x ); // 1 , 100 , -20 , 99 , 1000 , 0 , 30
    }

}
